Technical Q&A QA1111
Calling an AppleScript and providing parameters from an Application


QÅFÉAÉvÉäÉPÅ[ÉVÉáÉìì‡Ç≈é¿çsÇ≥ÇÍǃǢÇÈ AppleScript Ç…ÅAÉpÉâÉÅÅ[É^ÇìnÇ∑ï÷óòÇ»ï˚ñ@ÇÕdžÇËÇ‹Ç∑Ç©ÅH

AÅFÇÕÇ¢ÅAdžÇËÇ‹Ç∑ÅBä»íPDžǢǶnjÅAÉTÉuÉãÅ[É`ÉìÇä‹ÇfiÉXÉNÉäÉvÉgÇçÏê¨ÇµÅAǪÇÃå„ǪÇÃÉnÉìÉhÉâÇ…ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁìKêÿÇ»å`éÆÇÃÉCÉxÉìÉgÇëóÇÈDZÇΔÇ…ÇÊǡǃçsǶNjÇ∑ÅBéüÇ…ÅADZÇÍÇçsǧÇΩÇflÇÃé¿ç€ÇÃéËèáÇé¶ÇµÇ‹Ç∑ÅB



ÉXÉNÉäÉvÉgÇÃçÏê¨

ç≈èâÇÃÉXÉeÉbÉvÇÕÅAé¿çsǵÇΩÇ¢ëÄçÏÇçsǧÅAà íuà¯êîÇéùÇ¡ÇΩÉTÉuÉãÅ[É`ÉìÇä‹ÇfiÉXÉNÉäÉvÉgÇíËã`Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBÉäÉXÉg 1 ÇÕÅA Technical Q&A QA1018, "Using AppleScript to send an email with an attachment" Ç…é¶Ç≥ÇÍǃǢÇÈÉXÉNÉäÉvÉgÇ…ïœçXÇâ¡Ç¶ÇΩLJÇÃÇ≈Ç∑ÅBDZÇÃÉXÉNÉäÉvÉgÇ…ÇÕÅAìdéqÉÅÅ[ÉãÉÅÉbÉZÅ[ÉWÇçÏê¨Ç∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈÇ¢Ç≠ǬǩÇÃà¯êîÇéùÇ¡ÇΩÉTÉuÉãÅ[É`ÉìÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅB



on send_email_message(targetAddress, targetName, ¬
        subjectLine, messageText, fileAttachment)

    tell application "Mail"
        (* ìdéqÉÅÅ[ÉãÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉoÅ[ÉWÉáÉì *)
        set mailversion to version as string

        (* ï\é¶Ç‹ÇΩÇÕëóêMÇÃèàóùÇéwíË - displayForManualSend
        Ç™ true Ç»ÇÁÇŒÅAÉÜÅ[ÉUÇ™ëóêMÇ≈Ç´ÇÈÇÊǧDžÅAÉÅÉbÉZÅ[ÉWÇ™
        ê∂ê¨Ç≥ÇÍÅAÉEÉBÉìÉhÉEÇ…ï\é¶Ç≥ÇÍÇ‹Ç∑ÅBfalse ÇÃèÍçáÅA
        ÉÅÉbÉZÅ[ÉWÇÕÇ∑ÇÆÇ…ëóÇÁÇÍÇ‹Ç∑ *)
        set displayForManualSend to true

        (* ÉÅÉbÉZÅ[ÉWÇÃàÍî ìIÇ»óvëfÇéwíË *)
        set bodyvar to messageText
        set addrVar to targetAddress
        set addrNameVar to targetName

        (* åèñºÇíËã` *)
        set subjectvar to subjectLine

        (* ÉÅÉbÉZÅ[ÉWÇçÏê¨ *)
        set composeMessage to (a reference to (make new compose message ¬
            at beginning of compose messages))
        tell composeMessage
            make new to recipient at beginning of to recipients ¬
                with properties {address:addrVar, display name:addrNameVar}
            set the subject to subjectvar
            set the content to bodyvar

           (* ìYïtèëófiÇéwíË *)
           tell content
                make new text attachment ¬
                    with properties {file name:fileAttachment} ¬
                    at before the first word of the ¬
                    first paragraph
            end tell
        end tell

        (* ÉÅÉbÉZÅ[ÉWÇëóêMÇ‹ÇΩÇÕï\é¶ *)
        if displayForManualSend then
            set messageEditor to make new message editor ¬
                at beginning of message editors

            (* éüÇ…ÅAìdéqÉÅÅ[ÉãÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉoÅ[ÉWÉáÉì 
            1.0 ÇΔ 1.1 Ç…ÇÕdžÇÈÇ™à»ç~ÇÃÉoÅ[ÉWÉáÉìÇ≈èCê≥Ç≥ÇÍÇΩÉoÉOÇÃ
            âÒîï˚ñ@Çé¶Ç∑ *)
            if mailversion is "1.0" or mailversion is "1.1" then
                set compose message of last message editor to composeMessage
            else
                set compose message of first message editor to composeMessage
            end if
        else
            send composeMessage
        end if
    end tell
end send_email_message

ÉäÉXÉg 1Å@à íuà¯êîÇéùǬ AppleScript ÉTÉuÉãÅ[É`ÉìÇä‹ÇfiÉXÉNÉäÉvÉg





íçà”ÅF
ÉäÉXÉg 1 ÇÃÉXÉNÉäÉvÉgÇÕÅAìdéqÉÅÉbÉZÅ[ÉWÇ… 1 å¬ÇÃÉtÉ@ÉCÉãÇìYïtÇ∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅBAppleScript ÇÃÉXÉNÉäÉvÉgÇégǡǃÅAï°êîÇÃÉtÉ@ÉCÉãÇÉÅÉbÉZÅ[ÉWÇ…ìYïtÇ∑ÇÈDZÇΔLJâ¬î\Ç≈Ç∑ÅBDZÇÃï˚ñ@Çé¶Ç∑ó·Ç…ǬǢǃÇÕÅA QA1018, "Using AppleScript to send an email with an attachment" ÇÃÉXÉNÉäÉvÉgó·ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB





ÉXÉNÉäÉvÉgÇÃé¿çs

ÉXÉNÉäÉvÉgÇíËã`ǵÇΩå„ÇÕÅADZÇÍÇï€ë∂Ç∑ÇÈÇ¢Ç≠ǬǩÇÃï˚ñ@ǙdžÇËÇ‹Ç∑ÅBç≈ëÂÇÃÉpÉtÉHÅ[É}ÉìÉXÇ®ÇÊÇ— Mac OS X ÇΔÇÃå›ä∑ê´Çämï€Ç∑ÇÈÇΩÇflÇ…ÅAÉXÉNÉäÉvÉgÇÕÅAÉfÅ[É^ÉtÉHÅ[ÉNÉxÅ[ÉXÇÃÉRÉìÉpÉCÉãçœÇ› AppleScript ÇΔǵǃ .scpt ÉtÉ@ÉCÉãÇ…ï€ë∂ǵNjÇ∑ÅB

ÉXÉNÉäÉvÉgÇÉÅÉÇÉäÇ…ÉçÅ[ÉhǵÇΩå„ÇÕÅA OSAExecuteEvent ÉãÅ[É`ÉìÇégǡǃÉCÉxÉìÉgÉnÉìÉhÉâÇåƒÇ—èoÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉäÉXÉg 2 ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃíÜÇ≈ OSAExecuteEvent ÇégǡǃÅAÉXÉNÉäÉvÉgÇÃÉTÉuÉãÅ[É`ÉìÉnÉìÉhÉâÇåƒÇ—èoÇ∑ï˚ñ@Çé¶ÇµÇ‹Ç∑ÅBÇ‡ÇøÇÎÇÒDZÇÍÇê¨å˜Ç≥ÇπÇÈÇΩÇflÇ…ÇÕÅA OSAExecuteEvent Ç…íÒãüÇ≥ÇÍÇΩÉCÉxÉìÉgÇÕìKêÿÇ»å`éÆÇ≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB



static OSStatus ExecuteCompiledAppleScriptEvent(AEDesc *scriptData,
                          AppleEvent *theEvent, AEDesc *resultData) {
    ComponentInstance theComponent;
    AEDesc scriptTextDesc;
    OSStatus err;
    OSAID contextID, resultID;

        /* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃèÛë‘Ç…ê›íË */
    theComponent = NULL;
    AECreateDesc(typeNull, NULL, 0, &scriptTextDesc);
    contextID = kOSANullScript;
    resultID = kOSANullScript;

        /* ÉXÉNÉäÉvÉeÉBÉìÉOÉRÉìÉ|Å[ÉlÉìÉgÇäJÇ≠ */
    theComponent = OpenDefaultComponent(kOSAComponentType, typeAppleScript);
    if (theComponent == NULL) { err = paramErr; goto bail; }

        /* ÉXÉNÉäÉvÉgÇêVǵǢÉRÉìÉeÉLÉXÉgÇ…ÉRÉìÉpÉCÉãÇ∑ÇÈ */
    err = OSALoad(theComponent, scriptData,
                    kOSAModeNull, &contextID);
    if (err != noErr) goto bail;

        /* ÉXÉNÉäÉvÉgÇé¿çsÇ∑ÇÈ */
    err = OSAExecuteEvent( theComponent, theEvent,
                    contextID, kOSAModeNull, &resultID);

        /* åãâ Ç™Ç†ÇÍÇŒèWÇflÇÈ */
    if (resultData != NULL) {
        AECreateDesc(typeNull, NULL, 0, resultData);
        if (err == errOSAScriptError) {
            OSAScriptError(theComponent, kOSAErrorMessage,
                        typeChar, resultData);
        } else if (err == noErr && resultID != kOSANullScript) {
            OSADisplay(theComponent, resultID, typeChar,
                        kOSAModeNull, resultData);
        }
    }
bail:
    AEDisposeDesc(&scriptTextDesc);
    if (contextID != kOSANullScript) OSADispose(theComponent, contextID);
    if (resultID != kOSANullScript) OSADispose(theComponent, resultID);
    if (theComponent != NULL) CloseComponent(theComponent);
    return err;
}

ÉäÉXÉg 2Å@ÉCÉxÉìÉgÉnÉìÉhÉâÇä‹ÇfiÉXÉNÉäÉvÉgÇÃé¿çs



Ç‡ÇøÇÎÇÒÅAÉXÉNÉäÉvÉgÇǪÇÃèÍÇ≈ìÆìIÇ…ÉRÉìÉpÉCÉãǵǃÅAOSAExecuteEvent ÇåƒÇ—èoǵǃÉCÉxÉìÉgÉnÉìÉhÉâÇé¿çsÇ∑ÇÈDZÇΔÇ™ñ]NjǵǢèÍçáLJdžÇËÇ‹Ç∑ÅBǪÇÃÇΩÇflÇÃéËñ@ÇÕÅAQA1026, "Calling AppleScript from an Application" Ç≈é¶Ç≥ÇÍǃǢÇÈï˚ñ@ÇΔîÒèÌÇ…ÇÊÇ≠éóǃǢNjÇ∑Ç™ÅAç™ñ{ìIÇ»à·Ç¢Ç™ 2 ǬdžÇËÇ‹Ç∑ÅB1 ǬÇÕÅAÉTÉuÉãÅ[É`ÉìÉnÉìÉhÉâÇ™ AppleScript ÉRÉìÉeÉLÉXÉgÇ…ÉRÉìÉpÉCÉãÇ≥ÇÍÇÈÇÊǧDžÅAÉRÉìÉpÉCÉãéûÇ…ÅAkOSAModeCompileIntoContext ÉtÉâÉOÇÉZÉbÉgÇ∑ÇÈDZÇΔÇ≈ÅALJǧ 1 ǬÇÕÅAOSAExecuteEvent ÇåƒÇ—èoǵǃÉXÉNÉäÉvÉgÇé¿çsÇ∑ÇÈDZÇΔÇ≈Ç∑ÅBÉäÉXÉg 3 ÇÕÅAÉRÉìÉpÉCÉãÇΔé¿çsÇÃÉvÉçÉZÉXÇÃéËèáÇé¶ÇµÇ‹Ç∑ÅB



static OSStatus ExecuteAppleScriptEvent(const void* text,
          long textLength, AppleEvent *theEvent, AEDesc *resultData) {
    ComponentInstance theComponent;
    AEDesc scriptTextDesc;
    OSStatus err;
    OSAID contextID, resultID;

        /* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃèÛë‘Ç…ê›íË */
    theComponent = NULL;
    AECreateDesc(typeNull, NULL, 0, &scriptTextDesc);
    contextID = kOSANullScript;
    resultID = kOSANullScript;

        /* ÉXÉNÉäÉvÉeÉBÉìÉOÉRÉìÉ|Å[ÉlÉìÉgÇäJÇ≠ */
    theComponent = OpenDefaultComponent(kOSAComponentType,
                    typeAppleScript);
    if (theComponent == NULL) { err = paramErr; goto bail; }

        /* ÉXÉNÉäÉvÉgÇÃÉeÉLÉXÉgÇÉAÉbÉvÉãÉCÉxÉìÉgÉfÉBÉXÉNÉäÉvÉ^ÉåÉRÅ[ÉhÇ…ë}ì¸Ç∑ÇÈ */
    err = AECreateDesc(typeChar, text, textLength, &scriptTextDesc);
    if (err != noErr) goto bail;

        /* ÉXÉNÉäÉvÉgÇêVǵǢÉRÉìÉeÉLÉXÉgÇ…ÉRÉìÉpÉCÉãÇ∑ÇÈÅB
           ÉnÉìÉhÉâÇä‹ÇfiÉXÉNÉäÉvÉgÇÉRÉìÉeÉLÉXÉgÇ…ÉRÉìÉpÉCÉãÇ∑ÇÈÇ…ÇÕÅA
           kOSAModeCompileIntoContext ÉtÉâÉOÇégópÇ∑ÇÈ  */
    err = OSACompile(theComponent, &scriptTextDesc,
                    kOSAModeCompileIntoContext, &contextID);
    if (err != noErr) goto bail;

        /* ÉXÉNÉäÉvÉgÇé¿çsÇ∑ÇÈ */
    err = OSAExecuteEvent( theComponent, theEvent,
                    contextID, kOSAModeNull, &resultID);

        /* åãâ Ç™Ç†ÇÍÇŒèWÇflÇÈ */
    if (resultData != NULL) {
        AECreateDesc(typeNull, NULL, 0, resultData);
        if (err == errOSAScriptError) {
            OSAScriptError(theComponent, kOSAErrorMessage,
                        typeChar, resultData);
        } else if (err == noErr && resultID != kOSANullScript) {
            OSADisplay(theComponent, resultID, typeChar,
                        kOSAModeDisplayForHumans, resultData);
        }
    }
bail:
    AEDisposeDesc(&scriptTextDesc);
    if (contextID != kOSANullScript) OSADispose(theComponent, contextID);
    if (resultID != kOSANullScript) OSADispose(theComponent, resultID);
    if (theComponent != NULL) CloseComponent(theComponent);
    return err;
}

ÉäÉXÉg 3 ÉCÉxÉìÉgÉnÉìÉhÉâÇä‹ÇfiÉXÉNÉäÉvÉgÇÃÉRÉìÉpÉCÉãÇΔé¿çs





ÉCÉxÉìÉgÇ…ÇÕâΩÇ™ä‹Ç‹ÇÍǃǢÇÈÇÃÇ≈ǵÇÂǧǩÅH

DZÇÃÉCÉxÉìÉgÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇëŒè€Ç…ǵǃçÏê¨Ç∑ÇÈÇ∑Ç◊ǃÇÃÉCÉxÉìÉgÇΔìØÇ∂å`éÆÇÃïWèÄìIÇ»ÉAÉbÉvÉãÉCÉxÉìÉgÉåÉRÅ[ÉhÇ≈Ç∑ÅBDZÇÃÉCÉxÉìÉgÇ…ÇÕÅAÉnÉìÉhÉâÇé¿çsÇ∑ÇÈÇÃÇ…ïKóvÇ»èÓïÒÇä‹Çfi 2 ǬÇÃÉpÉâÉÅÅ[É^ǙdžÇËÇ‹Ç∑ÅBÉTÉuÉãÅ[É`ÉìÇÃà¯êîÇÕÅAÉ_ÉCÉåÉNÉgÉpÉâÉÅÅ[É^ÅikeyDirectObjectÅjÇ…äiî[Ç≥ÇÍǃǢÇÈÉäÉXÉgÇÃà íuÇΔǵǃíÒãüÇ≥ÇÍÅAÉTÉuÉãÅ[É`ÉìÇÃñºëOÇÕÇ∑Ç◊ǃÇÃï∂éöÇ™è¨ï∂éöÇ…ïœä∑Ç≥ÇÍǃÅA2 î‘ñ⁄ÇÃÉCÉxÉìÉgÉpÉâÉÅÅ[É^ÅikeyASSubroutineNameÅjÇ…ï∂éöóÒÇΔǵǃäiî[Ç≥ÇÍÇ‹Ç∑ÅB



èdóvÅF
keyASSubroutineNameÅisnamÅjÉpÉâÉÅÅ[É^Ç…ÇÕÅAåƒÇ—èoÇ≥ÇÍÇÈÉTÉuÉãÅ[É`ÉìÇÃñºëOÇÃëSï∂éöÇ™è¨ï∂éöÇ…ïœä∑Ç≥ÇÍǃä‹Ç‹ÇÍǃǢÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÇΩÇΔǶnjÅAÉXÉNÉäÉvÉgÇÃÉTÉuÉãÅ[É`ÉìÇÃñºëOÇ™ GetDocumentSize Ç»ÇÁÇŒÅAkeyASSubroutineName ÉpÉâÉÅÅ[É^Ç…ìnÇ≥ÇÍÇÈï∂éöóÒÇÕÅAgetdocumentsize Ç≈Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB





íçà”ÅF
DZÇÃêflÇ≈é¶ÇµÇΩå`éÆÇÃÉCÉxÉìÉgÇÕÅAAESend ÇégǡǃÅAÉRÉìÉpÉCÉãÇ≥ÇÍÇΩé¿çsíÜÇà AppleScript ÇÃÉAÉvÉåÉbÉgÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ëóǡǃÅAǪÇÍÇÁÇÃÉTÉuÉãÅ[É`ÉìÉnÉìÉhÉâÇåƒÇ—èoÇ∑DZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB



DZÇÃèÓïÒÇä‹ÇfiÉAÉbÉvÉãÉCÉxÉìÉgÇÕîÒèÌÇ…ä»íPÇ…ëgÇ›óßǃÇÈDZÇΔÇ™Ç≈Ç´ÅAAECreateListÅAAEPutPtrÅAÇ®ÇÊÇ— AEPutDesc ÇÃåƒÇ—èoǵÇÃï¿Ç—Ç≈ç\ê¨Ç≥ÇÍÇ‹Ç∑ÅBÉäÉXÉg 4 ÇÕÅAÉäÉXÉg 1 Ç≈íËã`ǵÇΩÉnÉìÉhÉâÇåƒÇ—èoÇ∑ÇÃÇ…ìKǵÇΩÉAÉbÉvÉãÉCÉxÉìÉgÇçÏê¨Ç∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB



OSStatus CreateEmailMessageEvent(AppleEvent *theEvent,
        char* targetAddress, char* targetName, char* subjectLine,
        char* messageText, AliasHandle fileAttachment) {
    AEAddressDesc targetAddr;
    AEDescList theParameters;
    OSStatus err;
    ProcessSerialNumber PSN = {0, kCurrentProcess};
    char* handlerName = "send_email_message";
    char theState;

        /* ïúå≥â¬î\Ç»èÛë‘Çópà” */
    AECreateDesc(typeNull, NULL, 0, theEvent);
    AECreateDesc(typeNull, NULL, 0, &theParameters);
    AECreateDesc(typeNull, NULL, 0, &targetAddr);


        /* é©êgÇëŒè€Ç…ǵÇΩÉAÉhÉåÉXÇçÏê¨ */
    err = AECreateDesc(typeProcessSerialNumber, (Ptr) &PSN,
            sizeof(PSN), &targetAddr);
    if (err != noErr) goto bail;

        /* ÉAÉbÉvÉãÉCÉxÉìÉgÇçÏê¨ */
    err = AECreateAppleEvent('ascr', kASSubroutineEvent,
        &targetAddr, kAutoGenerateReturnID,
        kAnyTransactionID, theEvent);
    if (err != noErr) goto bail;

        /* à¯êîÇÃÉäÉXÉgÇçÏê¨ÅAí«â¡ */

            /* ÉRÉìÉeÉiÇÃÉäÉXÉgÇçÏê¨ */
        err = AECreateList(NULL, 0, false, &theParameters);
        if (err != noErr) goto bail;

            /* ï∂éöóÒÇí«â¡ */
        err = AEPutPtr(&theParameters, 0, typeText, targetAddress,
            strlen(targetAddress));
        if (err != noErr) goto bail;
        err = AEPutPtr(&theParameters, 0, typeText, targetName,
            strlen(targetName));
        if (err != noErr) goto bail;
        err = AEPutPtr(&theParameters, 0, typeText, subjectLine,
            strlen(subjectLine));
        if (err != noErr) goto bail;
        err = AEPutPtr(&theParameters, 0, typeText, messageText,
            strlen(messageText));
        if (err != noErr) goto bail;

            /* ÉGÉCÉäÉAÉXÉnÉìÉhÉãÇí«â¡ */
        theState = HGetState((Handle) fileAttachment);
        HLock((Handle) fileAttachment);
        err = AEPutPtr(&theParameters, 0, typeAlias, *fileAttachment,
                GetHandleSize((Handle) fileAttachment));
        HSetState((Handle) fileAttachment, theState);
        if (err != noErr) goto bail;


        /* è„ãLÇ≈çÏê¨ÇµÇΩÉpÉâÉÅÅ[É^ÉäÉXÉgÇí«â¡ */
    err = AEPutParamDesc(theEvent, keyDirectObject,
        &theParameters);


        /* ÉnÉìÉhÉâñºÇí«â¡ */
    err = AEPutParamPtr(theEvent, keyASSubroutineName,
        typeText, handlerName, strlen(handlerName));
    if (err != noErr) goto bail;


        /* ÉNÉäÅ[ÉìÉAÉbÉvèàóùÇΔèIóπ */
bail:
    AEDisposeDesc(&targetAddr);
    AEDisposeDesc(&theParameters);
    if (err != noErr) {
        AEDisposeDesc(theEvent);
    }
    return err;
}

ÉäÉXÉg 4 ÉäÉXÉg 1 Ç≈íËã`Ç≥ÇÍǃǢÇÈ AppleScript ÉTÉuÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ÇÃÇ…ìKǵÇΩÉAÉbÉvÉãÉCÉxÉìÉgÇÃçÏê¨



ÇΩÇæÇµÅADZÇÃÇÊǧǻÉCÉxÉìÉgÇçÏê¨Ç∑ÇÈLJǡÇΔÇÊÇ¢ä»íPÇ»ï˚ñ@ǙdžÇËÇ‹Ç∑ÅBêVǵǢ AEBuild ÉãÅ[É`ÉìÇÕÅAï°éGÇ»ÉAÉbÉvÉãÉCÉxÉìÉgÇä»íPÇ…çÏê¨Ç∑ÇÈã@î\ÇíÒãüǵNjÇ∑ÅBÉäÉXÉg 5 ÇÕÅAÉäÉXÉg 4 ÇÃåƒÇ—èoǵÇ∑Ç◊ǃÇÇ–ÇΔÇ‹ÇΔÇflDžǵǃÅAëóêMǵÇΩÇ¢ÉCÉxÉìÉgÇç\ízÇ∑ÇÈ 1 ǬÇÃÉVÉXÉeÉÄÉRÅ[ÉãÇ…Ç∑ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB



OSStatus CreateEmailMessageEvent(AppleEvent *theEvent,
        char* targetAddress, char* targetName, char* subjectLine,
        char* messageText, AliasHandle fileAttachment) {

    OSStatus err;
    ProcessSerialNumber PSN = {0, kCurrentProcess};

        /* ÉRÉìÉeÉiÇÃÉäÉXÉgÇçÏê¨ */
    err = AEBuildAppleEvent(
        'ascr', kASSubroutineEvent,
        typeProcessSerialNumber, (Ptr) &PSN, sizeof(PSN),
        kAutoGenerateReturnID, kAnyTransactionID,
        theEvent,
        NULL,
        "'----':[TEXT(@),TEXT(@),TEXT(@),TEXT(@),alis(@@)],"
        "'snam':TEXT(@)",
        targetAddress, targetName, subjectLine, messageText,
        fileAttachment, "send_email_message");

    return err;
}

ÉäÉXÉg 5 AEBuildAppleEvent ÉãÅ[É`ÉìÇégÇ¡ÇΩÅAÉXÉNÉäÉvÉgÇÃÉCÉxÉìÉgÉnÉìÉhÉâÇé¿çsÇ∑ÇÈÇÃÇ…ìKǵÇΩÉAÉbÉvÉãÉCÉxÉìÉgÇÃçÏê¨





Ç∑Ç◊ǃÇìùçá

Ç¢Ç≠ǬǩÇÃÉpÉâÉÅÅ[É^ÇÃílÇéùǬÉXÉNÉäÉvÉgÇåƒÇ—èoǵǃÅAñ{ï∂èëÇ≈ê‡ñæÇµÇΩÇ∑Ç◊ǃÇÃåƒÇ—èoǵÇìùçáÇ∑ÇÈï˚ñ@ÇÅAÉäÉXÉg 6 Ç…é¶ÇµÇ‹Ç∑ÅBäÓñ{ìIDžDZÇÍÇÁÇÃéËèáÇÕÅAÉRÉìÉpÉCÉãÇ≥ÇÍÇΩÉXÉNÉäÉvÉgÇ typeOSAGenericStorage å^Çà AEDesc Ç…ÉçÅ[ÉhǵÅAÉAÉbÉvÉãÉCÉxÉìÉgÇçÏê¨ÇµÅAçÏê¨ÇµÇΩÉAÉbÉvÉãÉCÉxÉìÉgÇégǡǃÉXÉNÉäÉvÉgÇÃÉTÉuÉãÅ[É`ÉìÇåƒÇ—èoǵNjÇ∑ÅB



AppleEvent theAEvent
AEDesc scriptData;
OSStatus err;
AliasHandle theAlias;
Ptr data;
Size count;

theAlias = GetAnAliasToSomeFile();

err = LoadMyScriptData(&data, &count);
if (err == noErr) {
    err = AECreateDesc(typeOSAGenericStorage,
                        data, count, &compiledScript);
    if (err == noErr) {
        err = CreateEmailMessageEvent(&theAEvent,
            "bogus@apple.com",
            "bogus address",
            "hello world subject",
            "This is a test message\n\n",
            theAlias);
        if (err == noErr) {
                err = ExecuteCompiledAppleScriptEvent(&scriptData,
                    &theAEvent, NULL);
                ...

ÉäÉXÉg 6Å@è„ãLÇÃÉäÉXÉgÇ≈íÒãüÇ≥ÇÍǃǢÇÈåƒÇ—èoǵÇÃèáèò





íçà”éñçÄ
ÉXÉNÉäÉvÉgÉGÉfÉBÉ^ÇÕí èÌÅAÉRÉìÉpÉCÉãçœÇ›ÉXÉNÉäÉvÉgÉfÅ[É^ÇÅAê∂ê¨Ç∑ÇÈÉtÉ@ÉCÉãÇÃíÜÇà 'scpt' É^ÉCÉvÇÃÉäÉ\Å[ÉXÇ…äiî[ǵNjÇ∑ÅBDZÇÃÉfÅ[É^ÇÕÅAGet1IndResource ÇåƒÇ—èoǵǃÅADZÇÍÇÁÇÃÉtÉ@ÉCÉãÇà 1 ǬDždžÇÈç≈èâÇà scpt ÉäÉ\Å[ÉXÇéÊìæÇ∑ÇÈDZÇΔÇ…ÇÊǡǃÉçÅ[ÉhÇ≈Ç´Ç‹Ç∑ÅBMac OS X ÇÃèÍçáÅAÉRÉìÉpÉCÉãçœÇ›ÉXÉNÉäÉvÉgÉfÅ[É^ÇÅAÉtÉ@ÉCÉãägí£éqÅA.scpt ÇéùǬÉtÉ@ÉCÉãÇÃÉfÅ[É^ÉtÉHÅ[ÉNÇ…ï€ë∂Ç∑ÇÈDZÇΔÇêÑèßǵNjÇ∑ÅBDZÇÃÉfÅ[É^ÇéÊìæÇ∑ÇÈÇ…ÇÕÅAÉfÅ[É^ÉtÉHÅ[ÉNëSëÃÇì«Ç›çûǛNjÇ∑ÅBÉXÉNÉäÉvÉgÇÉRÉìÉpÉCÉãÇ∑ÇÈÇΔÇ´Ç…ÅAÉRÉ}ÉìÉhÉâÉCÉìÉcÅ[ÉãÅAosacompile Ç… -d ÉIÉvÉVÉáÉìÇéwíËǵǃé¿çsÇ∑ÇÍÇŒÅAÉRÉìÉpÉCÉãçœÇ›ÉXÉNÉäÉvÉgÇÉtÉ@ÉCÉãÇÃÉfÅ[É^ÉtÉHÅ[ÉNÇ…ï€ë∂Ç≈Ç´Ç‹Ç∑Åiè⁄ç◊DžǬǢǃÇÕÅAosacompile Çà man ÉyÅ[ÉWÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅjÅB




[2002 îN 3 åé 13 ì˙]